import time
import datetime
from auc_celery.main import app
from django.db.models import F, Max
from api import models


@app.task(name="check_auction")
def check_auction():
    """拍卖场未开始--->预展"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 拍卖场开始时间<当前时间  结束的时间 ---status修改成拍卖中
    # 1. 未开拍  预展时间开始 < 当前时间 < 结束时间
    query_auction = models.Auction.objects.filter(status=1, preview_start_time__lte=now, preview_end_time__gte=now,
                                                  is_show=True, is_delete=False)
    # 拍品的状态修改成预览状态
    for item in query_auction:
        # item---当前拍卖场
        item.auction_item.filter(is_delete=False, is_show=True).update(status=2)
    # 专场的status修改
    query_auction.update(status=2)
    return 'ok0'


@app.task(name="check_auction_pay")
def check_auction_pay():
    """拍卖场预售--->开始"""
    # 当前时间，拍卖场开始时间，拍卖场结束时间
    now = datetime.datetime.now()
    # 未开始 拍场开始时间<当前时间<拍场结束时间
    query_auction = models.Auction.objects.filter(status=2, auction_start_time__lte=now,
                                                  auction_end_time__gte=now, is_delete=False, is_show=True)
    # 拍场状态修改
    for item in query_auction:
        item.auction_item.filter(is_delete=False, is_show=True).update(status=3)
        # 专场的status修改
    query_auction.update(status=3)
    return 'ok00'


@app.task(name="check_auction_end")
def check_auction_end():
    """拍卖场开始--->结束"""
    now = datetime.datetime.now()
    # 拍场结束时间<当前时间
    query_auction = models.Auction.objects.filter(status=3, auction_end_time__lte=now, is_operation=False,
                                                  is_delete=False, is_show=True)
    # 拍场状态修改
    # 商品状态修改
    # 订单状态生成
    # 总价格
    total_price = 0
    for item in query_auction:
        # item--->拍卖场
        # auction_item_query--->拍卖场query
        auction_item_query = item.auction_item.filter(status=3, is_delete=False, is_show=True)
        # auction_item_query--->当前拍卖场的拍品query
        for auction_item in auction_item_query:
            # auction_item--->拍品对象
            # 找出当前拍品的价格记录，找出每一个最大的那一个，进行相加  bid_record--->反向字段
            price_big_record = auction_item.bid_record.filter(is_delete=False, is_show=True, status=1)
            if price_big_record:
                # 最大的价格
                max_price = price_big_record.aggregate(max_price=Max('price'))['max_price']
                total_price += max_price
                # 当前商品的价格添加
                auction_item.deal_price = max_price
                auction_item.save()
                # 为出价最高者，创建订单
                userinfo = models.BidRecord.objects.get(item=auction_item, price=max_price).user
                order_obj = models.Order.objects.create(
                    uid=str(int(time.time())),
                    userinfo=userinfo,
                    auction=item,
                    auction_item=auction_item,
                    price=max_price,
                )
                # 拍品更新状态
                auction_item.status = 4
                auction_item.save()
            else:
                auction_item.status = 5
                auction_item.save()
        # 当前拍卖场的总价格
        item.total_price = total_price
        item.save()
    # 把当前拍卖场的状态修改成结束
    query_auction.update(status=4, is_operation=True)
    return 'ok'


@app.task(name="check_auction_item_order")
def check_auction_item_order():
    """生成的订单支付--状态修改"""
    # 当前时间
    now = datetime.datetime.now()
    #  4 2 7
    # 生 包 当
    # 生+ 包 >当
    # 创建的时间+时间段 < 当前时间  小于他才过期，过期时间是明天，今天怎么会过期
    # 创建时间 < 当前时间-时间段
    timer = now - datetime.timedelta(days=2)
    query_set = models.Order.objects.filter(status=1, create_time__lte=timer)
    if query_set:
        query_set.update(status=3)
    return 'ok'


#  支付时间 < 当前时间 + 时间段

'''
@app.task(name="check_coupon_start")
def check_coupon_start():
    now = datetime.datetime.now()
    # 未发布---未过期
    query_auction = models.CouponStrength.objects.filter(status=1, start_time__lte=now, end_time__gte=now)
    # 专场的status修改
    query_auction.update(status=2)
    return 'ok'


@app.task(name="check_coupon_end")
def check_coupon_end():
    now = datetime.datetime.now()
    # 未过期---已过期
    query_auction = models.CouponStrength.objects.filter(status=2, end_time__lte=now)
    query_auction.update(status=3)
    return 'ok'
'''
